//
//  ViewController.swift
//  SensorRef
//
//  Created by huanlv on 2017/9/13.
//  Copyright © 2017年 Wade. All rights reserved.
//

import UIKit
import CoreMotion

class ViewController: UIViewController {
    // 1 创建运动管理对象
    lazy var mgr = CMMotionManager()
    // 1 创建计步器对象
    lazy var pedometer = CMPedometer()
    override func viewDidLoad() {
        super.viewDidLoad()
        
        setupGyroPush()
    }
//    // 采用Core Motion的pull方式去数据采集
//    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
//        let acceleration = mgr.accelerometerData?.acceleration
//        print("x=\(acceleration!.x)\ny=\(acceleration!.y)\nz=\(acceleration!.z)\n")
//    }
}
extension ViewController {
    func setupPedometer() -> () {
        if pedometer {
            <#code#>
        }
    }
    /// 陀螺仪
    // 注：陀螺仪、加速计和磁力计都是使用CoreMotion框架，所以获取数据方式都是2种：push和pull，具体使用参照加速计
    fileprivate func setupGyroPush() -> () {
        // 2 判断陀螺仪是否可用
        if !mgr.isGyroAvailable {
            print("陀螺仪不可用")
            return
        }
        // 3 设置采样间隔（1.0/30：1秒采样30次）
        mgr.gyroUpdateInterval = 0.3
        // 4 开始采样（采样到数据之后就会在queue中执行闭包）
        mgr.startGyroUpdates(to: OperationQueue.main) { (gyroData, error) in
            print(gyroData!.rotationRate)
        }
    }
    /*
     加速计：检测设备在X/Y/Z轴上的受力情况
     注:iOS5之前,使用UIAccelerometer，从iOS5.0开始，UIAcceleration和UIAccelerometer已经被弃用。由Core Motion framework取代
     官方提示信息:
     UIAcceleration and UIAccelerometer are deprecated as of iOS 5.0. These classes have been replaced by the Core Motion framework.
     
     Core Motion获取数据的两种方式:
             push : 实时采集所有数据,采集频率高;
             pull : 在有需要的时候,才去采集数据;
     
     注：陀螺仪、加速计和磁力计都是使用CoreMotion框架，所以获取数据方式都是2种：push和pull，具体使用参照加速计
     */
    fileprivate func setupCoreMotionPush() -> () {
        // 2 判断加速计是否可用
        if !mgr.isAccelerometerAvailable {
            print("加速计不可用")
            return
        }
        // 3 设置采样间隔（1.0/30：1秒采样30次）
        mgr.accelerometerUpdateInterval = 0.3
        // 4 开始采样（采样到数据之后就会在queue中执行闭包）
        mgr.startAccelerometerUpdates(to: OperationQueue.main) { (accelerometerData, error) in
            if (error != nil) {
                return
            }
            
            // 5 获取加速度信息
            let acceleration = accelerometerData?.acceleration
            print("x=\(acceleration!.x)\ny=\(acceleration!.y)\nz=\(acceleration!.z)\n")
        }
    }
    fileprivate func setupCoreMotionPull() -> () {
        // 2 判断加速计是否可用
        if !mgr.isAccelerometerAvailable {
            print("加速计不可用")
            return
        }
        // 3 开始采样
        mgr.startAccelerometerUpdates()
    }
    /// 距离传感器的使用
    fileprivate func setupProximityState() -> () {
        // 使用前要打开当前设备距离传感器的开关(默认为:NO)
        UIDevice.current.isProximityMonitoringEnabled = true
        
        // 监听有物品靠近还是离开
        NotificationCenter.default.addObserver(self, selector: #selector(proximityStateDidChange), name: .UIDeviceProximityStateDidChange, object: nil)
    }
}
extension ViewController {
    @objc fileprivate func proximityStateDidChange() -> () {
        if UIDevice.current.proximityState {
            print("有物品靠近")
        } else {
            print("有物品离开")
        }
    }
}

